// pages/music/index.js
const ac= wx.getBackgroundAudioManager() //创建InnerAudioContext对象用于播放音乐
let lastIndex //最后点击的歌曲的索引号

Page({
    onReachBottom: function() {// 页面触底时执行
        console.log('onReachBottom')
        this.request() //不带参数，表示触底加载
    },
    request(key){ //请求获取歌曲的搜索结果病更新到界面上
        let offset=0
        if(!key){ //没有key值，表示触底加载
            key=this.data.search
            offset=this.data.songs.length
        }
        if(offset>0 && offset==this.data.songCount)return
		wx.request({
			url: `https://music.163.com/api/search/get/?s=${key}&limit=20&type=1&offset=${offset}`,
            success: r => { //r-请求返回的结果
                // console.log(r)
                let change={ songCount: r.data.result.songCount} //记录新增的数据
                r.data.result.songs.forEach(it=>{ //循环处理数组中的每一项数据it
                    change[`songs[${offset++}]`]={
						name: it.name, //歌名
						id: it.id, //歌曲的id号
                        duration: this.formatDuration(it.duration), //歌曲的时长
                        album: it.album.name, //专辑名称
                        // selected: false,
					}
                })
				this.setData(change) //更新页面数据
			},
			fail: e=>{
				console.log(e)
			}
		})
	},

    formatDuration(ms){ //把歌曲的时长转换为“分：秒”的格式
        let m=parseInt(ms/60000) //分钟
        let s=parseInt(ms/1000%60) //秒 
        return m+":"+(s<10?'0':'')+s //3:02 3:18
    },
	play(e){ //播放点击的歌曲
		// wx.pageScrollTo({
		// 	selector: `#s2`, //通过选择器来滚动页面
		// 	duration: 0,
		// })
		// wx.pageScrollTo({
		// 	scrollTop: 236, //236就是#s2节点的top的值
		// 	duration: 2000,
		// })
		// let q=wx.createSelectorQuery()
		// q.select('#s2').boundingClientRect(r=>{ //查询#s2节点的信息
		// 	console.log(r)
		// }).exec()
		// wx.createSelectorQuery().selectViewport().fields({
		// 	size: true,
		// 	scrollOffset: true,
		// }, r=>{
		// 	console.log(r)
		// }).exec()
		
		// return
        let index=e.currentTarget.dataset.index //点击歌曲的索引号
        //(1)更新整个数组
        // let songs=this.data.songs //获取页面数据songs
        // if(lastIndex!=null)songs[lastIndex].selected=false //取消上次点击歌曲的选择状态
        // songs[index].selected=true //点击的歌曲选择状态为真
        // lastIndex=index //更新最后点击歌曲的索引号
        // this.setData({ songs }) //更新页面数据
        // (2)仅仅更新有变化的数组元素
        let change={ paused: false } //记录有变化的数据
        if(lastIndex!=null){
			if(index==lastIndex)return //若点击的是同一首歌曲就直接返回
			change[`songs[${lastIndex}].selected`]=false //取消选择状态
		}
        change[`songs[${index}].selected`]=true //设置选择状态
        lastIndex=index //更新最后点击歌曲的索引号
        this.setData(change) //更新页面数据
        
        let id=this.data.songs[index].id //点击歌曲的id号
        let mp3=`https://music.163.com/song/media/outer/url?id=${id}.mp3` //获取MP3的地址
        console.log(mp3)
        ac.src=mp3
        ac.title=this.data.songs[index].name //必选项
		// ac.startTime=180 //开始播放的位置，单位是秒
		ac.play() //播放
	},
	pause(e){ //点击暂停按钮时
		if(this.data.paused){
			ac.play() //播放
		}else{
			ac.pause() //暂停
		}
		this.setData({paused: !this.data.paused})
    },
    search(e){ //输入框中输入结束按回车键，软键盘上搜索键
		let search=e.detail.value.trim() //获取搜索的关键词，删除前后的空白
		this.setData({search, songs:[]})
		this.request(search)
    },
    onUnload(){
        let songMessage=this.data //获取页面数据
        delete songMessage.__webviewId__
        wx.setStorageSync('songMessage', songMessage)
    },
	onLoad(e) {
        ac.onEnded(res=>{ //监听音乐播放结束
			console.log(res) // undefined
			let index=lastIndex+1 //下手歌曲的索引号
			if(index>=this.data.songs.length)index=0 //全部歌曲播放完毕，从头开始播放第一首歌曲
			this.play({currentTarget:{dataset:{index}}}) //播放指定的歌曲
			wx.createSelectorQuery().select(`#s${index}`).fields({rect:true, size:true})
			.selectViewport().fields({size:true, scrollOffset:true}).exec(r=>{
				console.log(r)
				let s=r[0], v=r[1]
				if(s.bottom>v.height-20){ //歌曲在屏幕低端出界
					wx.pageScrollTo({
						scrollTop: v.scrollTop+(s.bottom-v.height)+20,
						duration: 2000,
					})
			    }else if(s.top<0){ //顶端部分或全部出界
                    wx.pageScrollTo({
						scrollTop: v.scrollTop+s.top,
						duration: 2000,
					})
                }
			})
        })
        let songMessage=wx.getStorageSync('songMessage') //获取缓存数据
        console.log(songMessage) //空字符串
        if(songMessage){ //若原来缓存有数据
            this.setData(songMessage)
        }
	}
})